﻿using Microsoft.Xna.Framework;

namespace OmegaEngine
{
    // Represents a 3D object. These objects will be drawn before 2D objects, and will
    // have modifires automatically provide in the editor
    public interface I3DComponent
    {
        // Position in the Cartesian System (X, Y, Z)
        Vector3 Position { get; set; }

        // Rotation represented as a Vector3. This shouldn't be user for calculations, 
        // it is left in so that the rotation can be more easily modified by hand
        Vector3 EulerRotation { get; set; }

        // Rotation as a Matrix. This will give much smoother and cleaner calulations than a Vector3
        Matrix Rotation { get; set; }

        // Scale for each axis (X, Y, Z)
        Vector3 Scale { get; set; }

        // Bounding Box to use for picking and pre-collision
        BoundingBox BoundingBox { get; }
    }

    // Represents a 2D object. These objects will be drawn after 3D objects, and will have
    // modifiers automatically provided in the editor.
    public interface I2DComponent
    {
        Rectangle Rectangle { get; set; }
    }

    public enum ComponentType
    {
        // Represents all 2D Components (I2DComponent)
        Component2D,

        // Represents all 3D Components (I3DComponent)
        Component3D,

        // Represents all components that are either 2D or 3D components
        Both,

        // Represents all component regardless of type
        All
    }
}